package org.gestion.bp.service;

import java.util.Date;
import java.util.List;

import org.gestion.bp.dao.IBanqueDao;
import org.gestion.bp.entities.Client;
import org.gestion.bp.entities.Compte;
import org.gestion.bp.entities.Employe;
import org.gestion.bp.entities.Groupe;
import org.gestion.bp.entities.Operation;
import org.gestion.bp.entities.Retrait;
import org.gestion.bp.entities.Versement;
import org.springframework.transaction.annotation.Transactional;

@Transactional
public class BanqueMetierImpl implements IBanqueMetier {
	
	private IBanqueDao dao;

	public void setDao(IBanqueDao dao) {
		this.dao = dao;
	}

	@Override
	public Client addClient(Client cli) {
		return dao.addClient(cli);
	}

	@Override
	public Employe addEmploye(Employe e, Long codeSup) {
		return dao.addEmploye(e, codeSup);
	}

	@Override
	public Groupe addGroupe(Groupe g) {
		return dao.addGroupe(g);
	}

	@Override
	public void addEmployeToGroup(Long codeEmp, Long codeGrp) {
		dao.addEmployeToGroup(codeEmp, codeGrp);
	}

	@Override
	public Compte addCompte(Compte cp, Long codeCli, Long codeEmp) {
		return dao.addCompte(cp, codeCli, codeEmp);
	}

	@Override
	public void verser(double mnt, String codeCpte, Long codeEmp) {
		dao.addOperation(new Versement(new Date(), mnt), codeCpte, codeEmp);
		Compte cpte = dao.consulterCompte(codeCpte);
		cpte.setSolde(cpte.getSolde() + mnt);
	}

	@Override
	public void retirer(double mnt, String codeCpte, Long codeEmp) {
		dao.addOperation(new Retrait(new Date(), mnt), codeCpte, codeEmp);
		Compte cpte = dao.consulterCompte(codeCpte);
		cpte.setSolde(cpte.getSolde() - mnt);
	}

	@Override
	public void virement(double mnt, String codeCpte1, String codeCpte2, Long codeEmp) {
		retirer(mnt, codeCpte1, codeEmp);
		verser(mnt, codeCpte2, codeEmp);
	}

	@Override
	public Compte consulterCompte(String codeCpte) {
		return dao.consulterCompte(codeCpte);
	}

	@Override
	public List<Operation> consulterOperations(String codeCpte) {
		return dao.consulterOperations(codeCpte);
	}

	@Override
	public Client consulterClient(Long codeCli) {
		return dao.consulterClient(codeCli);
	}

	@Override
	public List<Client> consulterClients(String motCle) {
		return dao.consulterClients(motCle);
	}

	@Override
	public List<Compte> getComptesByClient(Long codeCli) {
		return dao.getComptesByClient(codeCli);
	}

	@Override
	public List<Compte> getComptesByEmploye(Long codeEmp) {
		return dao.getComptesByEmploye(codeEmp);
	}

	@Override
	public List<Employe> getEmployes() {
		return dao.getEmployes();
	}

	@Override
	public List<Groupe> getGroupes() {
		return dao.getGroupes();
	}

	@Override
	public List<Employe> getEmployesByGroupe(Long codeGrp) {
		return dao.getEmployesByGroupe(codeGrp);
	}
}
